#define PCB_STACK_SIZE 1024
#define PCB_NAME_SIZE 32
#define READY 1
#define SUSPENDED_READY 2
#define BLOCKED 3
#define SUSPENDED_BLOCKED 4
#define APPLICATION 0
#define SYSTEM 1

// R1 Merged Defines

#define BUFFER_SIZE 200
#define DEFAULT_DIRECTORY "."
#define DISPLAY_AT_A_TIME 2
#define MAX_ARGS 20
#define NUM_FUNCTIONS 21
#define COMMAND_LENGTH 25

struct process_control_block {
	
	char name[PCB_NAME_SIZE];	
	int memory_size, priority, state, class;
	unsigned char *stack_top, *stack_base, *execute, *load;

};

struct priority_queue_node{
	struct priority_queue_node *left;
	struct priority_queue_node *right;
	struct process_control_block *data;
};

struct priority_queue {
	int length;
	struct priority_queue_node *head;
	struct priority_queue_node *tail;
};

typedef struct process_control_block pcb;
typedef struct process_control_block *ppcb;
typedef struct priority_queue pq;
typedef struct priority_queue *ppq;
typedef struct priority_queue_node pqn;
typedef struct priority_queue_node *ppqn;